package org.cedar.syntaxcore;

import java.util.List;
import java.util.Map;

import org.cedar.exceptions.VariantIOException;


/**
 * <p>Title: 变量输入输出接口</p>
 *
 * <p>Description:
 *  实现该接口以实现变量存取
 * </p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: net.wzh</p>
 *
 * @author wzh
 * @version 1.0
 */
public interface VariantContext {
    /**
     * 获取变量值
     * @param variantName String 变量名
     * @return Object 返回变量值对象。对象类型由变量类型决定。
     * @throws VariantIOException
     */
    public Object get(String variantName) throws VariantIOException;

    /**
     * 设置变量值
     * @param variantName String ：变量名
     * @param variantValue Object：变量值对象。对象类型由变量类型决定。
     * @throws VariantIOException
     */
    public void put(String variantName, Object variantValue) throws
            VariantIOException;

    /**
     * 根据指定条件获取变量值
     * @param variantName String
     * @param params List： 条件列表
     * @return Object ：返回变量值对象。对象类型由变量类型决定。
     * @throws VariantIOException
     */
    public Object get(String variantName, List params) throws
            VariantIOException;

    /**
     * 根据条件设置变量值
     * @param variantName String ：变量名
     * @param params List ：条件列表
     * @param variantValue Object ：变量值对象。对象类型由变量类型决定。
     * @throws VariantIOException
     */
    public void put(String variantName, List params, Object variantValue) throws
            VariantIOException;

    /**
     * 是否含有指定变量名的变量
     * @param variantName String : 变量名。
     * @return boolean
     */
    public boolean containVariant(String variantName);
    
    public Map getAll()throws VariantIOException;
}
